/**
 * Copyright (c) 2010, Casey Lai
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * 
 * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation and/or
 * other materials provided with the distribution.
 * 
 * Neither the name of the Cheetah Group nor the names of its contributors may be
 * used to endorse or promote products derived from this software without specific
 * prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 */

package org.cheetahworkflow.designer.model;

import java.util.concurrent.atomic.AtomicInteger;

import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;

public abstract class Node extends Element {

	private static final long serialVersionUID = -6386409643121370207L;
	
	protected static AtomicInteger uuid = new AtomicInteger(0);
	
	protected Point location = new Point(0, 0);
	
	protected Dimension size = new Dimension(150, 50);
	
	protected int id = uuid.incrementAndGet();
	
	protected String caption = "Node " + id;
	
	protected String name = "node" + id;
	
	protected String description = "";
	
	protected Chart chart;
	
	public static void resetNodeID() {
		uuid = new AtomicInteger(0);
	}

	public Point getLocation() {
		return location;
	}

	public void setLocation(Point location) {
		if (!this.location.equals(location)) {
			Point oldValue = this.location;
			this.location = location;
			firePropertyChange(PROP_LOCATION, oldValue, location);
		}
	}
	
	public Dimension getSize() {
		return size;
	}
	
	public void setSize(Dimension size) {
		if (!this.size.equals(size)) {
			Dimension oldValue = this.size;
			this.size = size;
			firePropertyChange(PROP_SIZE, oldValue, size);
		}
	}

	public String getCaption() {
		return caption;
	}

	public void setCaption(String caption) {
		if (!this.caption.equals(caption)) {
			String oldValue = this.caption;
			this.caption = caption;
			firePropertyChange(PROP_CAPTION, oldValue, caption);
		}
	}
	
	public String getName() {
		return name;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		if (!this.description.equals(description)) {
			String oldValue = this.description;
			this.description = description;
			firePropertyChange(PROP_DESCRIPTION, oldValue, description);
		}
	}
	
	public void setChart(Chart chart) {
		this.chart = chart;
	}
	
	public Chart getChart() {
		return chart;
	}
}
